package org.cloudfoundry.community.servicebroker.brooklyn.model; import java.util.Map; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.exceptions.Exceptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.servicebroker.model.CreateServiceInstanceRequest; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; public class DefaultBlueprintPlan extends BlueprintPlan { private static final Logger LOG = LoggerFactory.getLogger(DefaultBlueprintPlan.class); private String appName; public DefaultBlueprintPlan(String id, String name, String description, String appName, Map<String, Object> metadata) { super(id, name, description, metadata); this.appName = appName; } @Override public String toBlueprint(String brooklynCatalogId, String location, CreateServiceInstanceRequest request) { ObjectWriter writer = new ObjectMapper().writer(); Map<String, Object> metadata = MutableMap.copyOf(getMetadata()); String name = (appName + " (CF Service)").trim(); try { if (metadata.containsKey("location")) { location = writer.writeValueAsString(metadata.remove("location")); } else { location = writer.writeValueAsString(location); } } catch (JsonProcessingException e) { LOG.error("unable to make location: {}", e.getMessage()); Exceptions.propagateIfFatal(e); } Map<Object, Object> config = MutableMap.of(); // add parameters // TODO sanitize this input from user Map<?, ?> parameters = request.getParameters(); if (parameters != null) { config.putAll(parameters); } config.putAll(metadata); String blueprint = ""; if (config.keySet().size() > 0) { String configJson = null; try { configJson = writer.writeValueAsString(config); blueprint = String.format("{\"name\":\"%s\", \"services\":[{\"type\": \"%s\"}], \"locations\": [%s], \"brooklyn.config\":%s}", name, brooklynCatalogId, location, configJson); } catch (JsonProcessingException e) { LOG.error("unable to add config: {}", e.getMessage()); Exceptions.propagateIfFatal(e); } } else { blueprint = String.format("{\"name\":\"%s\", \"services\":[{\"type\": \"%s\"}], \"locations\": [%s]}", name, brooklynCatalogId, location); } return blueprint; } }